package com.alibaba.dingtalk.openapi.newmessage.delivery;

import com.alibaba.dingtalk.openapi.exception.ApiRuleException;
import com.alibaba.dingtalk.openapi.newmessage.utils.DeliveryCheckUtils;
import com.alibaba.fastjson.JSONObject;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 使用模板发送工作通知消息
 * @author 魏荣杰
 *
 */
@Setter
@Getter
@ToString
public class CorpConversationSendByTemplateDelivery extends AbstractDelivery {

    private static final long serialVersionUID = -8623211268259778109L;

    /**
     * 应用agentId
     */
    private Long agentId;

    /**
     * 消息模板ID
     */
    private String templateId;

    /**
     * 	接收者的用户userid列表，最大列表长度：5000, 例如：3541561,454564  中间用英文逗号隔开
     */
    private String useridList;

    /**
     * 接收者的部门id列表，最大列表长度：500,  接收者是部门id下(包括子部门下)的所有用户   例如：3541561,454564  中间用英文逗号隔开
     */
    private String deptIdList;

    /**
     * 消息模板动态参数赋值数据
     */
    private String data;

    public CorpConversationSendByTemplateDelivery() {
    }

    @Override
    public JSONObject toJsonObject() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("agent_id", this.agentId);
        jsonObject.put("template_id", this.templateId);
        jsonObject.put("userid_list", this.useridList);
        jsonObject.put("dept_id_list", this.deptIdList);
        jsonObject.put("data", this.data);
        return jsonObject;
    }

    @Override
    public void check() throws ApiRuleException {
        DeliveryCheckUtils.checkNotEmpty(agentId, "agentId");
        DeliveryCheckUtils.checkNotEmpty(templateId, "templateId");
        DeliveryCheckUtils.checkMaxListSize(deptIdList, 500, "deptIdList");
        DeliveryCheckUtils.checkMaxListSize(useridList, 5000, "useridList");
    }
}
